package dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class JDBCBaseDao {
    public static String Driver="com.mysql.cj.jdbc.Driver";

    public static String jdbcurl="jdbc:mysql://121.4.68.210:4455/myblog?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT";

    public static String user="root";

    public static String pwd="Jiao20010916@";

    public Connection getConnection() {
        Connection con = null;	//创建用于连接数据库的Connection对象
        try {
            Class.forName(Driver);// 加载Mysql数据驱动
            con = DriverManager.getConnection(jdbcurl,user,pwd);// 创建数据连接
        } catch (Exception e) {
            System.out.println("数据库连接失败" + e.getMessage());
        }
        return con;	//返回所建立的数据库连接
    }
    /**
     *  增删改操作
     * @param sql SQL语句
     * @param setls PreparedStatement类，执行前请将参数插入类中
     * @return
     */
    public  Boolean iudsql(String sql,List<Object>  setls){
        Connection conn = getConnection();	// 首先要获取连接，即连接到数据库
        PreparedStatement stmt;
        try {
            //创建用于执行静态sql语句的Statement对象，st属局部变量
            stmt = conn.prepareStatement(sql);
            // 执行插入操作的sql语句，并返回插入数据的个数
            if(setls!=null&& setls.size()>0){
                for(int i=1;i<=setls.size();i++){
                    stmt.setObject(i,setls.get(i-1));
                }
            }
            int count=stmt.executeUpdate();
            conn.close();	//关闭数据库连接
            return  true;
        } catch (SQLException e) {
            System.out.println("插入数据失败" + e.getMessage());
        }
        return false;
    }

    /**
     * 注册
     * @param sql
     * @param setls
     * @return
     */
    public  Boolean reg(String sql,List<Object>  setls){
        Connection conn = getConnection();	// 首先要获取连接，即连接到数据库
        PreparedStatement stmt;
        try {
            //创建用于执行静态sql语句的Statement对象，st属局部变量
            stmt = conn.prepareStatement(sql);
            // 执行插入操作的sql语句，并返回插入数据的个数
            if(setls!=null&& setls.size()>0){
                for(int i=1;i<=setls.size();i++){
                    stmt.setObject(i,setls.get(i-1));
                }
            }
            int count=stmt.executeUpdate();
            conn.close();	//关闭数据库连接
            return  true;
        } catch (SQLException e) {
            System.out.println("插入数据失败" + e.getMessage());
        }
        return false;
    }


    public List<HashMap<String,Object>> selectall(String sql,List<Object> setls){
        Connection conn = getConnection();	// 首先要获取连接，即连接到数据库
        PreparedStatement stmt;
        try {
            List<HashMap<String,Object>> ls=new ArrayList<>();
            //创建用于执行静态sql语句的Statement对象，st属局部变量
            stmt = conn.prepareStatement(sql);
            // 执行插入操作的sql语句，并返回插入数据的个数
            if(setls!=null&& setls.size()>0){
                for(int i=1;i<=setls.size();i++){
                    stmt.setObject(i,setls.get(i-1));
                }
            }
            ResultSet rs = stmt.executeQuery();	//执行sql查询语句，返回查询数据的结果集
            ResultSetMetaData rsmd = rs.getMetaData() ;
            while(rs.next()){
                HashMap<String,Object> ha=new HashMap<>();
                for(int i=0;i<rsmd.getColumnCount();i++){
                    if(rsmd.isNullable(i+1)==0){
                        String columnLabel = rsmd.getColumnLabel(i + 1);
                        ha.put(columnLabel,rs.getObject(columnLabel));
                    }
                }
                ls.add(ha);
            }
            conn.close();	//关闭数据库连接
            return ls;
        } catch (SQLException e) {
            System.out.println("查询数据===" + e.getMessage());
        }
        return null;
    }
}
